package com.erlang.jpa.pojo;

import com.erlang.jpa.dao.CustomerDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

/**
 * 测试 JPQL
 *
 * @Author ZGQ
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations="classpath:applicationContext.xml")
public class CustomerTestDataJPA {

  @Autowired
  private CustomerDao customerDao;

  /**
   * 保存客户：调用save(obj)方法
   */
  @Test
  public void testSave() {
    Customer c = new Customer();
    c.setCustName("阿天");
    customerDao.save(c);
  }

  /**
   * 修改客户：调用save(obj)方法
   *      对于save方法的解释：如果执行此方法是对象中存在id属性，即为更新操作会先根据id查询，再更新
   *                         如果执行此方法中对象中不存在id属性，即为保存操作
   *
   */
  @Test
  public void testUpdate() {
    //根据id查询id为1的客户
    Customer customer = customerDao.findOne(4L);
    //修改客户名称
    customer.setCustName("阿华");
    //更新
    customerDao.save(customer);
  }

  /**
   * 根据id删除：调用delete(id)方法
   */
  @Test
  public void testDelete() {
    customerDao.delete(1L);
  }

  /**
   * 根据id查询：调用findOne(id)方法
   */
  @Test
  public void testFindById() {
    Customer customer = customerDao.findOne(2L);
    System.out.println(customer);
  }

  /**
   * 根据id查询：调用findOne(id)方法
   */
  @Test
  public void testFindSql() {
    List<Customer> customer = customerDao.findSql();
    customer.forEach(System.out::println);
  }
}